﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using Modelo;

namespace Proceso
{
    public class GestorCliente
    {
        public static bool VerificarTelefono(string telefono)
        {
            if (!String.IsNullOrEmpty(telefono))
            {
                string pattern = @"^[0-9]";
                if (!Regex.IsMatch(telefono, pattern))
                {
                    throw new Exception("Introduzca solo numeros");
                }
                if (telefono.First().ToString() == "4")
                {
                    if (telefono.Length < 7)
                        throw new Exception("Telefonos fijos deben tener 7 digitos");
                    return true;
                }
                if(telefono.First().ToString()!="4")
                {
                    throw new Exception("Telefonos fijos empiezan con 4");
                }
                return true;
            }
            return false;
        }
        public static bool VerificarCI(string ci)
        {
            string pattern = @"^[0-9]*$";
            List<Cliente> list = new List<Cliente>();
            list=BaseDatos.BDCliente.DevolverTodos();
            if (!Regex.IsMatch(ci, pattern))
            {
                throw new Exception("Introduzca solo numeros");
            }
            if (list!=null)
            {
                foreach (var item in list)
                {
                    if (item.CI.ToString().Equals(ci))
                        throw new Exception("Este carnet ya existe");
                }
            }
            return true;
        }
        public static bool VerificarNombre(string ap)
        {
            string pattern = @"^[a-zA-Z0-9]*$";
            if (!Regex.IsMatch(ap, pattern))
                throw new Exception("Formato incorrecto");
            return true;
        }
        public static bool VerificarDireccion(string dir)
        {
            string pattern = @"^[a-zA-Z0-9 ]*$";
            if (!Regex.IsMatch(dir, pattern))
                throw new Exception("Formato incorrecto en direccion");
            return true;
        }
        public static void InsertarCliente(string ci, string telefono,string nombre,string direccion)
        {
            Cliente cliente = new Cliente();
            if (!String.IsNullOrEmpty(ci))
            {
                if (VerificarCI(ci))
                    cliente.CI = Int64.Parse(ci);
            }
            else
                throw new Exception("Llene los campos obligatorios");
            if (!String.IsNullOrEmpty(telefono))
            {
                if (VerificarTelefono(telefono))
                    cliente.Telefono = Int64.Parse(telefono);
            }
            if (!String.IsNullOrEmpty(nombre))
            {
                if (VerificarNombre(nombre))
                    cliente.Apellido = nombre;
            }
            else
                throw new Exception("Llene los campos obligatorios");
            if (!String.IsNullOrEmpty(direccion))
            {
                if (VerificarDireccion(direccion))
                    cliente.Direccion = direccion;
            }
            else
                cliente.Direccion = " ";
            try
            {
                BaseDatos.BDCliente.InsertarCliente(cliente);
            }
            catch (Exception)
            {
                throw;
            }

        }
        public static Cliente ObtenerClientePorCI(string ci)
        {
            try
            {
                long c = Convert.ToInt64(ci);
                return BaseDatos.BDCliente.ObtenerClientePorCI(c);
            }
            catch (FormatException)
            {
                throw new Exception("Ci debe ser numerico");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static void ModificarCliente(string ci, string telefono, string nombre, string direccion)
        {
            Cliente cliente = new Cliente();
            cliente.CI = Int64.Parse(ci);
            if (!String.IsNullOrEmpty(telefono))
            {
                if (VerificarTelefono(telefono))
                    cliente.Telefono = Int64.Parse(telefono);
            }
            if (!String.IsNullOrEmpty(nombre))
            {
                if (VerificarNombre(nombre))
                    cliente.Apellido = nombre;
            }
            else
                throw new Exception("Llene los campos obligatorios");
            if (!String.IsNullOrEmpty(direccion))
            {
                if (VerificarDireccion(direccion))
                    cliente.Direccion = direccion;
            }
            else
                cliente.Direccion = " ";
            try
            {
                BaseDatos.BDCliente.ModificarCliente(cliente);
            }
            catch (Exception)
            {
                throw;
            }

        }
    }
}
